<?php
namespace app\api\controller;
//引入腾讯云短信验证文件
require(__DIR__."/../../../extend/qcloudsms/src/index.php");
use Qcloud\Sms\SmsSingleSender;
use app\api\model\Captcha;
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept,fs-token");
header('Access-Control-Allow-Methods: GET, POST');
class Sms extends  Base
{
    // 短信应用SDK AppID
    private $appid = 1400211622; // 1400开头

        // 短信应用SDK AppKey
    private  $appkey = "429f08cab6c2544bf7ff8065ebaaf8de";

        // 需要发送短信的手机号码
//    public  $phoneNumbers = ["21212313123", "12345678902", "12345678903"];

        // 短信模板ID，需要在短信应用中申请
    private  $templateId = 336434;  // NOTE: 这里的模板ID`7839`只是一个示例，真实的模板ID需要在短信控制台中申请

    private  $smsSign = "天之哲"; // NOTE: 这里的签名只是示例，请使用真实的已申请的签名，签名参数使用的是`签名内容`，而不是`签名ID`
    /**
     * 短信验证码发送函数
     * @param $phone char  手机号
     * @return mixed 短信信息或错误信息
     */
    public function send($phone,$pwd){
        if(user_md5($phone)!=$pwd){
            $this->apiReturn(303,'md5验证失败');
        }
        //设置随机验证
        $captcha = mt_rand(100000,999999);
        //将验证码保存到数据库
        $sql = [
            'captcha' => $captcha,
            'phone' => $phone,
            'add_time' => time()
        ];
        //根据手机号查询验证码
        $res = Captcha::getInfoByPhone($phone);
        //如果没有数据 则插入数据  否则更新数据
        if($res){
            //根据手机号进行数据更新
            $res->save([
                'captcha' => $captcha,
                'add_time'=> time()
            ],['phone' => $phone]);
        }else{
            Captcha::create($sql);
        }
        //捕获异常
        try{
            //实例化单发短信对象
            $ssender =  new SmsSingleSender($this->appid,$this->appkey);
            //设置模板对应参数  [验证码，失效时间]
            $params = [$captcha,10];
            //发送短信 86为国家码  返回结果为json数据
            $result = $ssender->sendWithParam("86", $phone, $this->templateId,
                $params, $this->smsSign, "", "");  // 签名参数未提供或者为空时，会使用默认签名发送短信
            //反序列化数据
            $data=json_decode($result);
            //返回结果
            $this->apiReturn(200,'发送成功',$data);
        }catch (\Exception $e){
            //返回错误信息
            $error = $e->getMessage();
            $this->apiReturn(303,$error);
        }
    }
}
